Question 1

HT46 A/D Type MCU内容如何?

Answer

HT46 A/D Type MCU提供2K4K8KOTP TypeMask Type4MCU,编号为HT46R47/HT46C47HT46R22/HT46C22HT46R23/HT46C23HT46R24/HT46C24总共8IC,其中除HT46R47/HT46C47外;均内含I2C序列传输接口,规格功能请参考Holtek Data Sheet


Question 2

HT46 A/D Type MCU功能有何不同?

Answer

Part No.

VDD

SystemClock

Program
Memory

Data
Memory

I/O

Timer

Interrupt

Stack

I2C

A/D

PFD

PWM

Package

8-bit

16-bit

Ext.

Int.

HT46R47
HT46C47

2.2V~5.5V

400kHz~8MHz

2Kx14

64x8

13

1

--

1

2

6

--

9-bitx4ch

v

8-bitx1

18DIP/SOP

HT46R22
HT46C22

2.2V~5.5V

400kHz~8MHz

2Kx14

64x8

19

1

--

1

3

6

v

9-bitx8ch

v

8-bitx1

24SKDIP/SOP

HT46R23
HT46C23

2.2V~5.5V

400kHz~8MHz

4Kx15

192x8

23

--

1

1

3

8

v

10-bitx8ch

v

8-bitx2

24SKDIP/SOP,
28SKDIP/SOP

HT46R24
HT46C24

2.2V~5.5V

400kHz~8MHz

8Kx16

384x8

40

--

2

1

4

16

v

10-bitx8ch

v

8-bitx4

48SSOP,
28SKDIP/SOP

注:细节规格请参考 Holtek Data Sheet


Question 3

HT46 A/D Type MCU封装脚位如何提供?

Answer

为了方便客户MCU升级使用,HT46R22/HT46C2224SKDIP/SOP脚位与HT46R23/HT46C2324SKDIP/SOP脚位功能相同。


Question 4

间接寻址如何使用?

Answer

首先将要读写之Data Memory的地址先存入地址指针缓存器 (MP),然后对IAR执行读写 (例如: MOV a, IAR),即可读到MP所指到的Data (MP的内容当地址)。间接寻址功能特别方便于数列 (array) 的处理,一般先将数列地址放入MP做运算后再读取所需的数列Data


Question 5

为什么HT46X47HT46X22MP Bit7写入0,但读出却是1

Answer

HT46X47 Data RAM40H~7FHHT46X22 Data RAM40H~7FH,因为两者之Data RAM皆不超过80H,故其MP仅有7Bits (Bit0~Bit6)有效,亦即MPBit7写入无效且读到始终为1。虽然MP写入70H读到F0H;实质上是指向70H,所以其间接寻址读写是完全正确的。


Question 6

HT46 A/D Type MCU有何重要功能及特性?

Answer

操作电压范围 2.2V ~ 5.5V
工业温度规格 -40°C ~ +85°C
Low Voltage Reset
功能
OTP / Mask Type MCU
兼容
其它请参考 Holtek Data Sheet


Question 7

HT46 A/D Type MCU是否提供Dice form

Answer

Holtek 同时提供OTP TypeMask Type MCUDice form的量产服务,但使用OTP MCU Dice量产时,客户要特别注意打线及烧录的操作问题。


Question 8

HT46 A/D Type MCU的工作频率为何?

Answer

5V3.3V3个电池的应用,工作频率达Max. 8MHz (3.3V)
3V2个电池的应用,工作频率达Max. 4MHz (2.2V)


Question 9

HT46 A/D Type MCUESDLatch-up能力如何?

Answer

HT46 A/D Type MCU为适合在工业产品使用;在ESDLatch-up特别加强。在ESD方面;依据美国军方标准MIL-STD-883E 3015.7;采用人体放电模式测试;每一I/O脚皆超过正负5KV以上。

Latch-up方面;依据JEDEC-NO.17标准,采用Current Mode方式测试,每一I/O脚皆超过正负100mA以上。


Question 10

HT46R23/HT46C23有两组MP使用有何不同?

Answer

MP0/R0MP1/R1必需配对使用,其中MP0/R0只能用在RAM BANK0MP1/R1则可以在任何RAM BANK使用。


Question 11

查表指令如何使用,有何注意事项?

Answer

查表指令有二种,一种是TABRDC指令,此指令读取目前指令所在表数据,另一种为TABRDL指令,此指令固定读取最后一页表数据。要查表时首先必需将表的Low Address填入TBLP再执行查表指令,表的Low Byte Data将存入指令指定的内存;表的High Byte Data被存入TBLH中,要注意未满16-Bit之表Data高位被补0


Question 12

没有PushPOP指令;中断时资料要如何备份?

Answer

虽然没有PushPOP指令,程序员仍可指定专用记忆RAM BYTE (例如:db ACCStack; for ACC Storage) 储存中断时会被破坏的资料。首先将ACC存入专用内存,然后利用ACC依序将Status和其它资料搬移至各别之专用内存。在中断返回前,再反序将其它备份资料,StatusACC回存,最后再执行RETI返回主程序。


Question 13

可以在Interrupt Service Routine内执行Call吗?

Answer

因为HT46 A/D Type MCU Stack数目有限,在Interrupt中执行Call要特别注意,如果在进入InterruptStack已经满了,则会造成Stack Over,而使得程序无法返回。所以若要在Interrupt内执行Call,必需考虑在最差情况下之Stack使用数目,务必使在最差状况下进入Interrupt仍有Stack空间。


Question 14

中断处理中可否允许相同的中断再进入?

Answer

理论上在进入中断时MCU会自动清除EMI旗标 (EMI=0),并禁止所有中断的再进入,若中断处理中用软件设定EMI旗标 (EMI=1),则在Stack有空之下,所有中断(含相同中断)皆可再进入。要允许相同的中断再进入,需特别注意备份资料的处理,应避免已备份之资料被再进入的中断所破坏。若不是非常紧急中断,一般不建议中断再中断。


Question 15

没用的I/O Pin如何处理?

Answer

若不用之I/O Pin浮接时,会造成IC的耗电,最好的处理方式就是将不用的I/O Pin设定成Output Pin,如果要设成Input Pin则要选择Pull-high OptionPin空接或不选Pull-high将此Pin接地。


Question 16

已经进入HALT Mode为何还有耗电?

Answer

MCU进入HALT会将系统OSC关闭,但WDT OSC (如果OptionWDT Enable) 仍在工作,而且全部I/O会保持HALT前状态,除了WDT OSC会耗一些电外,最要注意的是Input Port是否浮接或者Output Port是否仍有负载,这些I/O处理要非常小心,否则会耗大电流。


Question 17

PA已经Low为何没有唤醒MCU

Answer

MCUPA Port唤醒为瞬间下降缘触发,若在执行HALT之前PA已经Low,且在HALT期间一直维持在Low,因为没有下降缘动作,所以无法唤醒MCU


Question 18

为何外部中断有下降缘,仍然没有唤醒MCU

Answer

虽然MCU可由中断唤醒,但严格的说是要靠中断要求旗标 (Request Flag) EIF01才能唤醒。若在MCU进入HALT之前EIF已经设定 (EIF=1),则再来之INT无法改变EIF的值,亦即是EIF不能由01,所以不能唤醒MCU


Question 19

可以让外部中断不产生唤醒MCU吗?

Answer

在执行HALT之前先清除EMI再设定EIF=1,则外部中断就无法唤醒MCU


Question 20

WDT Clock Source选择WDT OSC和选择fSYS/4有何差别?

Answer

WDT Clock Source选择WDT OSC则在系统误入HALTWDT Timer仍然继续工作,当WDT Time-out可以再激活系统。若选择 fSYS/4则在误入HALT后,则一直沉睡下去无法Wake-up,但选择WDT OSC则需花一些代价 (消耗电流)。在另外一种情形,如果系统正常就有HALT功能,且在HALT时不希望被WDT叫醒,则此时WDT Source可选 fSYS/4


Question 21

2CLR WDT指令如何使用?

Answer

2CLR WDT可以增加系统可靠性。若程序有2个主要的交替循环Loop;则可在1LoopCLR WDT1,在另1LoopCLR WDT2,一旦程序错误或受噪声干扰造成一直停留在某一个Loop时;WDT就会激活,发出WDT Time-out重新激活CPU


Question 22

8-Bit TMR值如何设定?

Answer

8-Bit Timer/Counter为一向上数之计数器 (Counter),每当Counter数到255 (0FFH) 溢位0H时产生中断 (Interrupt),所以若要计数为N (N < 256);则TMR值要设定成 256-N,设定好后激活TMRTMR即从设定值往上数到255溢出到0 (256),故所得值即256-(256-N)=N


Question 23

16-Bit TMR值如何设定?

Answer

16-Bit Timer/Counter为一向上数之计数器 (Counter),每当Counter数到65535 (0FFFFH)溢位0H时产生中断 (Interrupt),所以若要计数为N (N < 65536);则TMR值要设定成 65536-N,设定好后激活TMRTMR即从设定值往上数到65535溢出到0 (65536),故所得值即65536-(65536-N)=N


Question 24

16-Bit Timer/Counter的设定和读取顺序?

Answer

HT46系列MCU内部Data Bus均为8-Bit,对于16-Bit的资料必需两次才能完成,对16-Bit Timer/Counter的写必需先写Low Byte然后High Byte,而读的顺序必需先读High Byte然后Low Byte


Question 25

Prescaler + 8-Bit TimerPrescaler可以Reset吗?

Answer

PrescalerPower On Reset后,就一直不停的Run,没有任何指令可以ResetPrescaler


Question 26

8-Bit Timer/CounterTimer Mode如何设定?

Answer

Timer/Counter3种模式,即TimerEvent CounterPulse Width3种。

要执行Timer Mode要执行以下动作设定:

  1. 设定Timer/CounterTimer Mode (TM1TM0=10H)
  2. 依据Timer的长短选定Prescaler (PSC2~PSC0)
  3. 设定计数初始值 (TMR)
  4. 打开相对应中断致能旗标 (ETIEMI)
  5. 设定 Timer ON (TMRC.4=1)

Timer被打开后,Timer开始向上计数,若Timer OFF (TMRC.4=0),则Timer立即停止。下次TimerON,则从上次停留值继续往上数,直到满位溢出00H时产生中断,同时TimerTMR Register重新Load初始值。


Question 27

16-Bit Timer/CounterTimer Mode如何设定?

Answer

Timer/Counter3种模式,即TimerEvent CounterPulse Width3种。

要执行Timer Mode要执行以下动作设定:

  1. 设定Timer/CounterTimer Mode (TM1TM0=10H)
  2. 设定计数初始值 (TMR)
  3. 打开相对应中断致能旗标 (ETIEMI)
  4. 设定 Timer ON (TMRC.4=1)

Timer被打开后,Timer开始向上计数,若Timer OFF (TMRC.4=0),则Timer立即停止。下次TimerON,则从上次停留值继续往上数,直到满位溢出00H时产生中断,同时TimerTMR Register重新Load初始值。


Question 28

Timer/CounterEvent Counter Mode如何设定?

Answer

Timer/Counter3种模式,即TimerEvent CounterPulse Width3种。

要执行Event Counter Mode要执行以下动作:

  1. 设定Timer/CounterEvent Counter Mode (TM1TM0=01H)
  2. 选择TE; TE=1Count Falling EdgeTE=0Count Rising Edge
  3. 设定计数初始值 (TMR)
  4. 打开相对应中断致能旗标 (ETIEMI)
  5. 控制Timer ON (TMRC.4=1)

Question 29

8-Bit Timer/CounterPulse Width Mode如何设定?

Answer

Timer/Counter3种模式,即TimerEvent CounterPulse Width3种。

要执行Pulse Width Mode要执行以下动作:

  1. 设定Timer/CounterPulse Width Mode (TM1TM0=11H)
  2. 选择TE; TE=1 High PulseTE=0Low Pulse
  3. 依据Pulse长短需求选定Prescaler (PSC2~PSC0=n)
  4. 设定TMR计数初始值 (一般设定=0)
  5. 打开相对应中断致能旗标
  6. 打开Timer ON (TMRC.4)

执行完以上步骤,程序可抽空Check TON值,若TON=0表示Pulse Width量度完成,Timer的值 x 2n即是Pulse时间的宽度。


Question 30

16-Bit Timer/CounterPulse Width Mode如何设定?

Answer

Timer/Counter3种模式,即TimerEvent CounterPulse Width3种。

要执行Pulse Width Mode要执行以下动作:

  1. 设定Timer/CounterPulse Width Mode (TM1TM0=11H)
  2. 选择TE; TE=1 High PulseTE=0Low Pulse
  3. 设定TMR计数初始值 (一般设定=0)
  4. 打开相对应中断致能旗标
  5. 打开Timer ON (TMRC.4)

执行完以上步骤,程序可抽空Check TON值,若TON=0表示Pulse Width量度完成,Timer的值即是Pulse时间的宽度。


Question 31

8-Bit PFD如何设定?

Answer

HT46X47HT46X228-Bit Timer,使用PFD设定如下:

  1. Mask Option选择PFD Option Enable
  2. 依据所要频率选择Prescaler (PS0~PS2=n)TMR (fPFD=fSYS/(2nx(256-TMR)x2))
  3. 打开Timer ON (TMRC.4)
  4. PA.3设成Output ModePAC.3=0

执行以上设定后,若PA.3=1PFD ON,若PA.3=0PFD OFF


Question 32

16-Bit PFD如何设定?

Answer

HT46X2316-Bit Timer,使用PFD设定如下:

  1. Mask Option选择PFD Option Enable
  2. 依据所要频率设定TMR (fPFD = fSYS /((65536-TMR) x 2))
  3. 打开Timer ON (TMRC.4)
  4. PA.3设成Output ModePAC.3=0

执行以上设定后,若PA.3=1PFD ON,若PA.3=0PFD OFF


Question 33

HT46 A/D Type MCU PWM如何使用?

Answer

首先Mask Option需选择PWM功能,使用时,先设PDC.0=1再写入一个欲输出的值丢到PWM缓存器,当PD.0=0PWM输出0;当PD.0=1输出PWM波形 (若有第2PWM则控制PDC.1PD.1)


Question 34

PWM (6+2) Mode (7+1) Mode之频率为何?

Answer

PWM (6+2) Mode是将PWM的值分成4次送出,即每64个时钟送出PWM/4,其PWM频率为 fSYS/26PWM (7+1) Mode是将PWM的值分成2次送出,即每128个时钟送出PWM/2,其PWM频率为 fSYS/27。所以说 (6+2) Mode8 Bit Mode相比其PWM频率提高为4倍,而 (7+1) Mode8 Bit Mode相比其频率提高为2倍。


Question 35

HT46 A/D Type MCU如何使用

Answer

使用A/D要执行以下动作:

  1. 首先定义Port B Configuration (PCR2PCR1PCR0) 选定有几个模拟输入信道。
  2. 选定特定信道 (ACS2ACS1ACS0),此信道必需在前项选定信道内。
  3. 命令A/D开始转换 (ADCR.7=0 --> 1 --> 0),此时A/D显示忙碌 (EOC=1)
  4. 等待76TAD时钟,A/D显示转换完成 (EOC=0);并产生中断要求旗标(ADF=1)
  5. 读取资料 (ADRLADRH)

 


Question 36

HT46 A/D Type MCU I2C Bus的功能?

Answer

HT46 A/D Type MCUHT46X47外均有I2C Bus接口,此I2C Bus可经由SCLSDA两条线接收,由Master传来的Data或者应Master要求回传DataMaster,亦即此I2C Bus完全处在被动(Slave)角色,所以说此I2C仅有Salve功能,而无Master功能。


Question 37

HT46 A/D Type MCU I2C Bus如何使用?

Answer

首先必需设好地址(HADR)并打开I2C Bus (HEN=1)和中断(EHI=1);从此I2C电路开始接收SDA传来的地址资料,若地址资料与HADR内容一致;I2C自动应答(ACK) Master;并设定HASS (HASS=1)旗标,进入中断。

此时MCU判断Master的要求是读或是写资料,若Master要读资料,则MCUData写入HDR并设定传送(HTX=1)旗标,若Master要写资料则I2C继续接收Data。总体来说;此I2C有自动接收地址、自动比对地址、自动应答(ACK)和将HDR之资料,依据Master的时钟信号(SCL)传送出去,所以MCU祇要简单的从HDR读和写数据即可,详细流程请参照Data Sheet


Question 38

TAD的时钟频率如何计算?

Answer

A/D转换需要76TAD时钟,时钟的频率由ADCS1ADCS0决定,其计算如下表:

ADCS1

ADCS0

TAD频率

0

0

fSYS/2

0

1

fSYS/8

1

0

fSYS/32

1

1

Undefined


Question 39

2颗电池 (2.2V~3.8V) 的工作电压操作可以使用LVR吗?

Answer

LVR的动作点在2.7V~3.3V之间,所以2.2V的工作电压不能选择LVR,若一定要侦测2.2V低压,可以外加Voltage Detector (HT70XX系列)


Question 40

Power On Reset时间为何?

Answer

3V时,Power On Reset时间为45ms~180ms5V时,Power On Reset的时间为35ms~140ms


Question 41

MCU Power On时,VDD的上升时间有何限制?

Answer

MCU Power On时为了使Reset可以完全成功,建议Power On VDD上升时间在20ms以内。当电池逐渐没电,电池内阻增大,造成VDD上升缓慢会影响Reset成功。


Question 42

Data SheetReset电路,是否可适用各种应用状况?

Answer

Data Sheet所提供的Reset电路一般可适用各种应用状况,若在特殊情形,要参考当时环境及Noise,再设计适当Reset电路。


Question 43

低电压Reset (LVR) HALT时,是否会耗电?

Answer

LVRHALT时没有作用,所以没有耗电问题。


Question 44

ADCLK时钟频率设定是否有限制 , 如何计算?

Answer

HT46 A/D with LCD Type MCU 的 A/D Clock Period (TAD) 最快为1us , 因此由ADCS1和ADCS0设定时钟频率需确定TAD不可小于1us . 其计算可参考下表:

Fsys

A/D Clock Period (TAD)

ADCS1,ADCS0 = 00
(Fsys/2)
ADCS1,ADCS0 = 01
(Fsys/8)
ADCS1,ADCS0 = 10
(Fsys/32)
ADCS1,ADCS0 =11
1 MHz 2 us 8 us 32 us Undefine
2 MHz 1 us 4 us 16 us
4 MHz *500 ns 2 us 8 us
8 MHz *250 ns 1 us 4 us

*星号表示ADCS1和ADCS0设定值不正确 , TAD小于1us .

Question 45

A/D取样时间为何?

Answer

A/D取样时间(A/D Sampling Time) 需32TAD . 若A/D Clock Period 为4us 则A/D Sampling Time = 128us。


Question 46

系统频率Fsys=4MHz , ADCLK = fsys/32 , A/D input signal 是一个square wave(250us), A/D要对square wave之 level 进行转换,但是有时就转换不正确 .

Answer

HT46 A/D with LCD Type MCU 的转换时间(A/D conversion time)为76 TAD . 于此转换进行期间会先进行 S&H 动作, 其时间为32 TAD . 参考下图 : A/D Conversion Timing .
若 Fsys = 4MHz, ADCLK = fsys/32, A/D Sampling Time需32TAD = 256us
因 ADCLK之除级为free run counter, 所以A/D Sampling Time tolerance应为31~32 ADCLK; 248us此问题可修改 ADCLK 为fsys/8 , 缩短A/D Sampling Time 为64us .


Question 47

HT46R47 工作在3.3V时, LVR option 选择 enable 与 disable 时功耗差多少?

Answer

在一般操作电流约为 mA级 , LVR option 选择 enable 与 disable 时, 功耗差仅约为30μA. 且在 HALT 状态下, LVR 会自动关闭的,所以在使用HT46R47时, 不需担心 LVR 功耗问题.